home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 3 / Gold Medal Software - Volume 3 (Gold Medal) (1994).iso / prog / scroll2.arj / SCROLL.C < prev    next >
C/C++ Source or Header  |  1994-01-15  |  4KB  |  111 lines

  1. #include <stdio.h>
  2. // This is a simple program to demonstrate one way to scroll a page
  3. // up or down using mode X.
  4.  
  5. // To compile it use large model and link with xlib06l.lib, one idea
  6. // to make things speed up is to modify the page flip routine source
  7. // and remove all loops (I believe there are two). This can make the
  8. // difference between 30fps and 60fps!!
  9.  
  10. // Enjoy.
  11.  
  12. #include <stdlib.h>
  13. #include <conio.h>
  14. #include <ctype.h>
  15. #include <alloc.h>
  16. #include <dos.h>
  17. #include <bios.h>
  18. #include <time.h>
  19. #include "xlib_all.h"
  20.  
  21. #define FARPTR(x) (MK_FP(FP_SEG(x),FP_OFF(x)))
  22.  
  23. void load_pallete(void);
  24. void load_mapsprites(void);
  25. void put_map(int);
  26.  
  27. char far * Sprite[1];     // Sprite table
  28. int        counter;       // Global counter
  29. char       buff[5000];    // Temporary buffer for loading sprites
  30.  
  31. char far *        // from xlib6
  32. AllocatedSprite(int width, int height, int logical_width, char far * bitmap)
  33. {
  34.     char far * result;
  35.     int size;
  36.     result = farmalloc((width * height * 7) / 2 + 25);
  37.     if (result == 0) {printf("\n out of memory \n");exit(0);}
  38.     size = x_compile_bitmap_32(logical_width, bitmap, result);
  39.     return farrealloc(result, size);
  40. }
  41.  
  42. void load_pallete()     // load pallete from raw file
  43. {
  44.    FILE *k;
  45.    int i;
  46.    unsigned char r,g,b;
  47.    k = fopen("mac.pal","rb");
  48.    for (i=0; i<256; i++){
  49.       r = fgetc(k);
  50.       g = fgetc(k);
  51.       b = fgetc(k);
  52.       x_set_rgb(i,r,g,b);
  53.    }
  54.    x_set_rgb(0,0,0,0);
  55.    fclose(k);
  56. }
  57.  
  58. void load_mapsprites()
  59. {
  60.  FILE *k;
  61.  int i,l;
  62.  unsigned char c;
  63.  k=fopen("tile.vsp","rb");
  64.  for (l=0; l<=0; l++){      // loop for the number of sprites to load
  65.     for (i=0; i<4; i++)
  66.        fgetc(k);            // strip size header
  67.     for (i=2;i<18;i++)      // make first line all 0's -- why? I dont know it just works better, expirimentation is great!!
  68.        buff[i] = 0;
  69.     for (i=18;i<274;i++)    // actually read spite data
  70.        buff[i] = fgetc(k);
  71.     buff[0] = 16;           // set up sizes for compilation
  72.     buff[1] = 17;
  73.     Sprite[l] = AllocatedSprite(buff[0], buff[1], 80,FARPTR(buff)); // compile it
  74.  }
  75.  fclose(k);
  76. }
  77.  
  78. void put_map(int i)
  79. {
  80.    register int k,j,r;
  81.    r = (16 - (i % 16))+16;  // compute offset of tiles to screen
  82.    for (j=0;j<21;j++)
  83.       for (k=0;k<16;k++)
  84.      x_put_cbitmap((j << 4),(k<<4)+r,HiddenPageOffs,Sprite[0]);
  85. }
  86.  
  87. main()
  88. {
  89.    struct time begin,end;
  90.    int i=0;
  91.    load_mapsprites();                 // load sprite(s)
  92.    free(buff);                        // free sprite buffer
  93.    x_set_mode(1,320);                 // set X mode
  94.    load_pallete();                    // load pallete
  95.    x_set_tripplebuffer(798);          // set up triple buffer
  96.    gettime(&begin);                   // get start time
  97.    do {                               // loop
  98.       put_map(i++);                      // draw a page
  99.       x_page_flip(0,32);                 // look at page just drawn
  100.       counter++;                         // inc global counter
  101.    } while (!kbhit());                // until anykey hit
  102.    gettime(&end);                     // get end time
  103.    x_text_mode();                     // exit X mode
  104.    printf("number of frames = %d\n",counter);   // figure it all out
  105.    printf("begin time       = %d - %d - %d\n",begin.ti_min,begin.ti_sec,begin.ti_hund);
  106.    printf("end time         = %d - %d - %d\n",end.ti_min,end.ti_sec,end.ti_hund);
  107.    printf("frame rate       = %d\n",
  108.       counter/(((end.ti_hour*360)+(end.ti_min*60)+(end.ti_sec)+(end.ti_hund/100))-
  109.       ((begin.ti_hour*360)+(begin.ti_min*60)+(begin.ti_sec)+(begin.ti_hund/100))));
  110.    return(0);
  111. }